package com.zenithmind.mall.service;

import java.math.BigDecimal;
import java.util.List;

/**
 * 优惠券计算服务接口 - 遵循接口隔离原则，专门负责优惠券的计算逻辑
 * 
 * @author ZenithMind Team
 * @since 2025-07-03
 */
public interface CouponCalculationService {

    /**
     * 检查优惠券是否可用
     * 
     * @param userCouponId 用户优惠券ID
     * @param orderAmount 订单金额
     * @return 是否可用
     */
    Boolean checkCouponAvailable(String userCouponId, BigDecimal orderAmount);

    /**
     * 计算优惠金额
     * 
     * @param userCouponId 用户优惠券ID
     * @param orderAmount 订单金额
     * @return 优惠金额
     */
    BigDecimal calculateDiscountAmount(String userCouponId, BigDecimal orderAmount);

    /**
     * 计算多张优惠券的最优组合
     * 
     * @param userCouponIds 用户优惠券ID列表
     * @param orderAmount 订单金额
     * @return 最优优惠金额
     */
    BigDecimal calculateBestDiscount(List<String> userCouponIds, BigDecimal orderAmount);

    /**
     * 获取最优优惠券组合
     * 
     * @param userCouponIds 用户优惠券ID列表
     * @param orderAmount 订单金额
     * @return 最优优惠券ID列表
     */
    List<String> getBestCouponCombination(List<String> userCouponIds, BigDecimal orderAmount);

    /**
     * 验证优惠券是否适用于指定商品
     * 
     * @param userCouponId 用户优惠券ID
     * @param productIds 商品ID列表
     * @param categoryIds 分类ID列表
     * @return 是否适用
     */
    Boolean isCouponApplicable(String userCouponId, List<String> productIds, List<String> categoryIds);
}
